package com.hzw.saas.api.msg;

import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hzw.saas.api.msg.bo.MsgBo;
import com.hzw.saas.api.msg.bo.MsgCountBo;
import com.hzw.saas.api.msg.enums.MsgRead;
import com.hzw.saas.api.msg.query.MsgQuery;
import com.hzw.saas.api.msg.query.MsgSearchQuery;
import com.hzw.saas.common.config.util.PageParam;

/**
 * <p>
 * 用户消息表 服务类
 * </p>
 *
 * @author sonam
 * @since 2020-12-22
 */
public interface IMsgService {

    /**
     * 通过ID获取消息
     * @param msgId
     * @return
     */
    MsgBo getMsgById(String msgId);

    /**
     * 添加一条消息（会做校验）
     * @param msgQuery
     * @return
     */
    MsgBo addMsg(MsgQuery msgQuery);

    /**
     *  强制发送一条消息不做校验
     * @param msgQuery
     * @return
     */
    MsgBo forceAddMsg(MsgQuery msgQuery);

    /**
     * 删除消息
     * @param msgId
     * @return
     */
    boolean deleteMsg(String msgId);

    /**
     * 删除群组消息
     * @param groupIds
     * @return
     */
    boolean deleteGroupMsg(List<String> groupIds);

    /**
     * 设置消息可读/未读
     * @param msgId
     * @param userId
     * @param userMsgRead
     */
    void setMsgRead(String msgId, String userId, MsgRead userMsgRead);

    /**
     * 设置全部消息已读
     */
    void setMsgAllRead(String userId);

    /**
     * 根据消息类型分页查询当前用户得所有消息
     * @param pageParam
     * @param msgSearchQuery
     * @return
     */
    IPage<MsgBo> findAllMsgByUserIdAndTypeAndRead(PageParam pageParam, MsgSearchQuery msgSearchQuery);

    /**
     * 查询消息数量
     * @param userId
     * @return
     */
    MsgCountBo getMsgCountByUserId(String userId);

    /**
     * 获取当前用户所有群组消息ids
     *
     * @param groupIds
     * @param userId
     * @param msgRead
     * @return
     */
    List<String> getGroupMsgIds(List<String> groupIds, String userId, MsgRead msgRead);

    /**
     * 获取当前用户所有系统消息ids
     *
     * @param userId
     * @param msgRead
     * @return
     */
    List<String> getSystemMsgIds(String userId, MsgRead msgRead);

    /**
     * 获取当前用户所有个人消息ids
     *
     * @param userId
     * @param msgRead
     * @return
     */
    List<String> getUserMsgIds(String userId, MsgRead msgRead);

    /**
     * 获取当前登录用户所有消息id
     * @param userId
     * @param msgRead
     * @return
     */
    List<String> getAllMsgIdList(String userId, MsgRead msgRead);

    /**
     * 清除所有的消息
     * @param msgIds
     * @param userId
     */
    void deleteMsgByMsgIdsAndUserId(List<String> msgIds, String userId);

}
